
package Controlador;
import Controladores_Consultas.ControladorConsulChoferes;
import Modelo.Choferes;
import Modelo.Listas;
import Vista.JFrameChoferes;
import Vista.Mensajes;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.LinkedList;

public class ControladorChoferes implements ActionListener, KeyListener {

    private JFrameChoferes formChoferes;
    private LinkedList<Choferes> listaChoferes;

    public ControladorChoferes(LinkedList<Choferes> ListaChof) {
        listaChoferes = ListaChof;
        formChoferes = new JFrameChoferes();
        formChoferes.agregarListener(this, this);
        formChoferes.setVisible(true);
        Enabled(false);


        //------------------------------
        formChoferes.getjTextFieldCedula().addKeyListener(new KeyAdapter() 
        {
            public void keyTyped(KeyEvent e) 
            {
                CedulaKeyTyped(e);
            }

            public void keyPressed(KeyEvent e) {

                CedulakeyPressed(e);
            }
        });
        //-----------------------
        formChoferes.getjTextFieldNombres().addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {
                NombresKeyTyped(e);
            }

            public void keyPressed(KeyEvent e) {

                NombreskeyPressed(e);
            }
        });
        //------------------------------
        formChoferes.getjTextFieldTelefono().addKeyListener(new KeyAdapter() {
            public void keyTyped(KeyEvent e) {
                TelefonoKeyTyped(e);
            }
        });
         //-----------------------
        formChoferes.getjTextFieldDireccion().addKeyListener(new KeyAdapter() {
           
            public void keyPressed(KeyEvent e) {

             DireccionkeyPressed(e);
            }
        });

    }

    //-------------------------------
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource().equals(formChoferes.getBtnSalirCH())) {
            formChoferes.dispose();
        }

        if (e.getSource().equals(formChoferes.getBtnBuscarCH())) {
            new ControladorConsulChoferes(listaChoferes);
        }
        if (e.getSource().equals(formChoferes.getBtnGuardarCH())) {
            Grabar();
        }
        if (e.getSource().equals(formChoferes.getBtnEliminarCH())) {
            Limpiar();
            Enabled(false);
        }
    }

    @Override
    public void keyTyped(KeyEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void keyPressed(KeyEvent e) {

        if (e.getSource().equals(formChoferes.getjTextFieldCedula())) {
            CedulakeyPressed(e);

        }

    }

    @Override
    public void keyReleased(KeyEvent e) {
//throw new UnsupportedOperationException("Not supported yet.");
    }

    //----------------------------------  
    //Hacer editables las cajas de texto
    //----------------------------------
    private void Enabled(boolean Status) 
    {
        formChoferes.getjTextFieldCedula().setEnabled(!Status);
        formChoferes.getjTextFieldNombres().setEnabled(Status);
        formChoferes.getjTextFieldDireccion().setEnabled(Status);
        formChoferes.getjTextFieldTelefono().setEnabled(Status);
    }

    //-----------------------------------------
    //Limpia el contenido de las cajas de texto
    //------------------------------------------
    private void Limpiar() {
        formChoferes.getjTextFieldCedula().setText("");
        formChoferes.getjTextFieldNombres().setText("");
        formChoferes.getjTextFieldDireccion().setText("");
        formChoferes.getjTextFieldTelefono().setText("");
    }

    //-----------------------------------------------
    //Ingresa un nuevo chofer en la lista de choferes
    //------------------------------------------------
    private void Grabar() {
        Choferes choferes = new Choferes();
        String Cadena;

        Cadena = formChoferes.getjTextFieldCedula().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Cedula Vacia", "");
            formChoferes.getjTextFieldCedula().requestFocusInWindow();
            return;
        }

        Cadena = formChoferes.getjTextFieldNombres().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Nombre Vacio", "");
            formChoferes.getjTextFieldNombres().requestFocusInWindow();
            return;
        }

        Cadena = formChoferes.getjTextFieldDireccion().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Direccion Vacia", "");
            formChoferes.getjTextFieldDireccion().requestFocusInWindow();
            return;
        }

        Cadena = formChoferes.getjTextFieldTelefono().getText();
        if (Cadena.length() == 0) {
            Mensajes.Aviso("Telefono vacio", "");
            formChoferes.getjTextFieldTelefono().requestFocusInWindow();
            return;
        }
            if (Cadena.length() !=11) {
            Mensajes.Aviso("Telefono invalido", "");
            formChoferes.getjTextFieldTelefono().requestFocusInWindow();
            return;
            
        }

        choferes.Choferes(formChoferes.getjTextFieldCedula().getText(),
                formChoferes.getjTextFieldNombres().getText(),
                formChoferes.getjTextFieldDireccion().getText(),
                formChoferes.getjTextFieldTelefono().getText());

        listaChoferes.add(choferes);
         Mensajes.Aviso("Chofer guardado con exito", "");
         Limpiar();
         Enabled(false);
         formChoferes.getjTextFieldCedula().requestFocusInWindow();
    }

    private void CedulakeyPressed(KeyEvent e) {
        if (e.getSource().equals(formChoferes.getjTextFieldCedula())) {

            String Cadena;
            int PosiChofer;
            Choferes chofer = new Choferes();
            Cadena = formChoferes.getjTextFieldCedula().getText();

            if (e.VK_ENTER == e.getKeyCode() && Cadena.length() != 8) {
                Mensajes.Aviso("Cedula invalida", "");
                formChoferes.getjTextFieldCedula().requestFocusInWindow();
            }
            if (e.VK_ENTER == e.getKeyCode() && Cadena.length() == 8) {

                PosiChofer = ExisteChofer(Cadena);
                if (PosiChofer >= 0) {
                    chofer = listaChoferes.get(PosiChofer);
                    formChoferes.getjTextFieldNombres().setText(chofer.getNombres());
                    formChoferes.getjTextFieldDireccion().setText(chofer.getDireccion());
                    formChoferes.getjTextFieldTelefono().setText(chofer.getTelefonos());

                    Mensajes.Aviso("Chofer ya Existe", "");
                    Limpiar();

                } else {
                    Enabled(true);
                    formChoferes.getjTextFieldNombres().requestFocusInWindow();

                }
            }

        }
    }

    public int ExisteChofer(String CedCho) 
    {
        int i = 0, Posi = -1;

        Choferes chofer;
        String CedLista;

        for (i = 0; i < listaChoferes.size(); i++) {
            chofer = listaChoferes.get(i);

            CedLista = chofer.getCedula();

            if (CedLista.equals(CedCho)) {
                Posi = i;
                return Posi;
            }

        }

        return Posi;
    }

    private void CedulaKeyTyped(java.awt.event.KeyEvent evt) {
        String Cadena;
        char Caracter;

        Cadena = formChoferes.getjTextFieldCedula().getText();
        if (Cadena.length() == 8) {
            evt.consume();
        } else {
            Caracter = evt.getKeyChar();

            if (Caracter == '.') {
                evt.consume();
            }

            if (Caracter < '0' || Caracter > '9') {
                evt.consume();
            }
        }

    }

    private void NombresKeyTyped(java.awt.event.KeyEvent evt) {
        String Cadena;
        String CarString;
        char Caracter;

        Cadena = formChoferes.getjTextFieldNombres().getText();
        if (Cadena.length() == 20) {
            evt.consume();
        } else {
            Caracter = evt.getKeyChar();

            CarString = Caracter + "";
            CarString = CarString.toUpperCase();
            Caracter = CarString.charAt(0);

            if (Caracter == ' ') {
                return;
            }

            if (Caracter < 'A' || Caracter > 'Z') {
                evt.consume();
            }

        }


    }

    private void TelefonoKeyTyped(java.awt.event.KeyEvent evt) {
        String Cadena;
        char Caracter;

        Cadena = formChoferes.getjTextFieldTelefono().getText();
        if (Cadena.length() == 11) {
            evt.consume();
        } else {
            Caracter = evt.getKeyChar();

            if (Caracter == '.') {
                evt.consume();
            }

            if (Caracter < '0' || Caracter > '9') {
                evt.consume();
            }
        }

    }

    private void NombreskeyPressed(KeyEvent e) {
        if (e.VK_ENTER == e.getKeyCode()) {
            formChoferes.getjTextFieldDireccion().requestFocusInWindow();
        }
    }

    private void TelefonokeyPressed(KeyEvent e) {
        if (e.getSource().equals(formChoferes.getjTextFieldTelefono())) {

            String Cadena;
            Cadena = formChoferes.getjTextFieldCedula().getText();

            if (e.VK_ENTER == e.getKeyCode() && Cadena.length() != 11) {
                Mensajes.Aviso("Telefono invalido", "");
                formChoferes.getjTextFieldTelefono().requestFocusInWindow();

            }
        }
    }
    private void DireccionkeyPressed(KeyEvent e) {
        if (e.VK_ENTER == e.getKeyCode()) {
            formChoferes.getjTextFieldTelefono().requestFocusInWindow();
        }
    }
}

